package fr.unice.servlet;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Zakaria
 */
	import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.jdom.*;
import org.jdom.output.*;

public class JDOMList {
//Nous allons commencer notre arborescence en créant la racine XML
   //qui sera ici "Users".
   static Element racine;
 //  private Element trackList= new Element("trackList");
   static String file ;
   static ArrayList<String> listeIdVideo=new ArrayList<String>();
   
   static org.jdom.Document document;
  public JDOMList() {

  }
    public JDOMList(String file) {
        
        lectureXML lecteur  = new lectureXML();
        lecteur.ouverture(file);
        racine = lectureXML.getRacine();
        document = lectureXML.getDocument();
    }

    public void VerifPlaylist(String namePlayList,String id_video){

        //List ListTrack = racine.getChildren("track");


    }
    

    public static Element getChildPlayList(Element maPlayList,String idVideo){
        Element rep=null;
         if (maPlayList!=null){

        List listPlayList = maPlayList.getChildren();

            //On crée un Iterator sur notre liste
            Iterator i =   listPlayList.iterator();
            int position =0;
            while(i.hasNext())
            {
                //On recrée l'Element courant à chaque tour de boucle afin de
                //pouvoir utiliser les méthodes propres aux Element comme :
                //selectionner un noeud fils, modifier du texte, etc...
                Element courant = (Element)i.next();
                if (courant.getChildText("idVideo").equals(idVideo)){
                    return courant;
                }
            }
        }

        return rep;
    }

    public static int getPositionVideo(Element maPlayList,String idVideo){
    int rep=-1;
     if (maPlayList!=null){

        List listPlayList = maPlayList.getChildren();

            //On crée un Iterator sur notre liste
            Iterator i =   listPlayList.iterator();
            int position =0;
            while(i.hasNext())
            {
                //On recrée l'Element courant à chaque tour de boucle afin de
                //pouvoir utiliser les méthodes propres aux Element comme :
                //selectionner un noeud fils, modifier du texte, etc...
                Element courant = (Element)i.next();
                if (courant.getChildText("idVideo").equals(idVideo)){
                    return Integer.parseInt(courant.getChild("title").getAttributeValue("position"));
                }
            }
        }

      return rep;
    }

    public static ArrayList<String> getListeIdVideo(Element maPlayList){

   
    String reponse = "";
    JDOMList.listeIdVideo.clear();
    if (maPlayList!=null){

        List listPlayList = maPlayList.getChildren();

            //On crée un Iterator sur notre liste
            Iterator i =   listPlayList.iterator();
            int position =0;
            while(i.hasNext())
            {
                //On recrée l'Element courant à chaque tour de boucle afin de
                //pouvoir utiliser les méthodes propres aux Element comme :
                //selectionner un noeud fils, modifier du texte, etc...
                Element courant = (Element)i.next();
                JDOMList.listeIdVideo.add(courant.getChildText("idVideo"));

                
            }


    }

    return JDOMList.listeIdVideo;



    }

   //On crée un nouveau Document JDOM basé sur la racine que l'on vient de créer
   
public void setDocument(Document document) {
        JDOMList.document = document;
    }

    public  void setRacine(Element racine) {
        JDOMList.racine = racine;
    }


   static void creer(){

   }

    public  Document getDocument() {
        return document;
        
    }

    public  Element getRacine() {
        return racine;
    }



   //Ajouter ces deux méthodes à notre classe JDOM1
public static  void affiche()
{
   try
   {
      //On utilise ici un affichage classique avec getPrettyFormat()
      XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat());
      sortie.output(document, System.out);
   }
   catch (java.io.IOException e){}
}

public static  void enregistre(String fichier)
{
   try
   {
      //On utilise ici un affichage classique avec getPrettyFormat()
      XMLOutputter sortie = new XMLOutputter(Format.getPrettyFormat());
      //Remarquez qu'il suffit simplement de créer une instance de FileOutputStream
      //avec en argument le nom du fichier pour effectuer la sérialisation.
      sortie.output(document, new FileOutputStream(fichier));
     // System.out.println("fichier crée");
      
           
   }
   catch (java.io.IOException e){
       
       }

}
// Ajout d"un nouvel utilisateur
public static void ajouterPlayList(Element racine1, Document document1,String namePlayList,String fileName){
    racine=racine1;
    document=document1;
    Element PlaysListSelect = new Element("PlayListSelect");
    Attribute namePlayListAt = new Attribute("name",namePlayList);
    PlaysListSelect.setAttribute(namePlayListAt);
    racine.addContent(PlaysListSelect);
   // enregistre(fileName);


}

public static ArrayList<String> getListPlayList(String name){

            ArrayList<String> repListPlayList = new ArrayList<String>();

            //On crée une List contenant tous les noeuds "etudiant" de l'Element racine
            List listPlayList = racine.getChildren("PlayListSelect");

            //On crée un Iterator sur notre liste
            Iterator i =   listPlayList.iterator();
            while(i.hasNext())
            {
                //On recrée l'Element courant à chaque tour de boucle afin de
                //pouvoir utiliser les méthodes propres aux Element comme :
                //selectionner un noeud fils, modifier du texte, etc...
                Element courant = (Element)i.next();
                repListPlayList.add(courant.getAttributeValue("name"));
            }
            return repListPlayList;

}



public static Element getPlayList(String name){

             Element elemSearch = null;
            //On crée une List contenant tous les noeuds "etudiant" de l'Element racine
            List listPlayList = racine.getChildren("PlayListSelect");

            //On crée un Iterator sur notre liste
            Iterator i =   listPlayList.iterator();
            while(i.hasNext())
            {
                //On recrée l'Element courant à chaque tour de boucle afin de
                //pouvoir utiliser les méthodes propres aux Element comme :
                //selectionner un noeud fils, modifier du texte, etc...
                Element courant = (Element)i.next();
                if(courant.getAttributeValue("name").equals(name)){
                    return courant;
                  }
            }
            return elemSearch;

}
public static String getPlayListString(String name){

    Element maPlayList=getPlayList(name);
    String reponse = "";
    if (maPlayList!=null){

        List listPlayList = maPlayList.getChildren();

            //On crée un Iterator sur notre liste
            Iterator i =   listPlayList.iterator();
            int position =0;
            while(i.hasNext())
            {
                //On recrée l'Element courant à chaque tour de boucle afin de
                //pouvoir utiliser les méthodes propres aux Element comme :
                //selectionner un noeud fils, modifier du texte, etc...
                Element courant = (Element)i.next();
                reponse+=courant.getChildText("image")+"~"+courant.getChildText("idVideo")+"~"+courant.getChildText("title")+"}";
            }


    }

    return reponse;
}

public  static void ajouterVideo(Element racine1, Document document1,String namePlayList, String image, String idVideo, String title,int position,String fileName){
   racine = racine1;
   document = document1;

    Element track = new Element("track");
    Attribute namePlayListAt = new Attribute("name",namePlayList);
    track.setAttribute(namePlayListAt);
    Attribute positionAt = new Attribute("position",String.valueOf(position));
      
              Element titleElt = new Element("title");
              titleElt.setText(title);
              titleElt.setAttribute(positionAt);
               Element creatorElt = new Element("creator");
              creatorElt.setText("YouNice");
              Element imagesElt = new Element("image");
              imagesElt.setText(image);
              creatorElt.setText("YouNice");

              Element locationElt = new Element("location");
              locationElt.setText("http://www.youtube.com/watch?v="+idVideo);

              Element id_videoElt = new Element("idVideo");
             id_videoElt.setText(idVideo);


           track.addContent(titleElt);
            track.addContent(imagesElt);
            track.addContent(creatorElt);
             track.addContent(locationElt);
              track.addContent(id_videoElt);
            //  trackList.addContent(track);
                
              Element addPlayList =JDOMList.getPlayList(namePlayList);


              if (addPlayList!=null){
                  System.out.println("addContent track");

                  ArrayList<String> maListeVideo=JDOMList.getListeIdVideo(addPlayList);

                  if(maListeVideo.contains(idVideo)){
                      // la vidéo est déja dans la liste

                       Element unElm=JDOMList.getChildPlayList(addPlayList, idVideo);

                       if (!unElm.getChild("title").getAttributeValue("position").equals(String.valueOf(position))){
                           unElm.getChild("title").setAttribute("position", String.valueOf(position));
                       }



                  }else {

                         addPlayList.addContent(track);
                  }
                  
             }else{
                  System.out.println("ajouterVieo : ajouterPlayList");
                  JDOMList.ajouterPlayList(racine1,document1,namePlayList, fileName);
                  addPlayList =JDOMList.getPlayList(namePlayList);
                  addPlayList.addContent(track);
              //racine.addContent(track);
             }
              
            
              enregistre(fileName);
              //affiche();


}




}
